class BravoView implements View
{

    /**
     * Texturenzuweisung:
     * 
     * leeresFeld     " . "
     * Gras=          " g "
     * Mauer=         " m "
     * WegStein=      " s "
     * WegKies=       " k "
     * Baum=          " b "
     * InnenBoden=    " i "
     * BergTextur=    " e "
     * 
     * SpielerA1=      " 0 "
     * SpielerA2=      " 1 " 
     * SpielerA3=      " 2 "
     * SpielerA4=      " 3 " 
     * SpielerA5=      " 4 "
     * 
     * SpielerB1=      " 5 "
     * SpielerB2=      " 6 " 
     * SpielerB3=      " 7 "
     * SpielerB4=      " 8 " 
     * SpielerB5=      " 9 "
     * 
     */

    //Attribute
    Controller controller;
    Fenster fenster;
    //Konstruktor
    public BravoView ()
    {
        fenster= new Fenster("Fenster",this);
    }

    //Methoden 
    public void controllerSetzen(Controller neuerController)
    {
        this.controller = neuerController;
    }

    public void fensterSetzen(Fenster neuerFenster)
    {
        this.fenster = neuerFenster;
    }

    public void objektSetzen(int x, int y, char objekttyp)
    {
        String bildname= " ";
        if(objekttyp == 'g')
        {
            bildname="Material/gras.png";
            fenster.objektSetzen(x,y,bildname);
        } 

        else if(objekttyp == 's')
        {
            bildname="Material/hauptweg.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'm')
        {
            bildname="Material/mauer.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'i')
        {
            bildname="Material/steinboden.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'k')
        {
            bildname="Material/kies.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'a')
        {
            bildname="Material/baum_1.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'b')
        {
            bildname="Material/baum_2.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'c')
        {
            bildname="Material/baum_3.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'd')
        {
            bildname="Material/baum_4.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'w')
        {
            bildname="Material/waldboden.png";
            fenster.objektSetzen(x,y,bildname);
        }

        else if(objekttyp == 'e')
        {
            bildname="Material/berg.png";
            fenster.objektSetzen(x,y,bildname);
        }

    }

    public void einheitSetzen(int x, int y, char objekttyp)
    {
        if (x<0 || y < 0 || x>42 || y>23) {
            System.out.println("Fehler");
            return;
        }

        String bildname = " ";
        if(objekttyp == '.')
        {
            bildname = " ";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '0')
        {
            bildname = "Material/grau_links.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '1')
        {
            bildname = "Material/gelb_links.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '2')
        {
            bildname = "Material/rot_links.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '3')
        {
            bildname = "Material/schwarz_links.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '4')
        {
            bildname = "Material/braun_links.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '5')
        {
            bildname = "Material/grau_rechts.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '6')
        {
            bildname = "Material/gelb_rechts.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '7')
        {
            bildname = "Material/rot_rechts.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '8')
        {
            bildname = "Material/schwarz_rechts.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == '9')
        {
            bildname = "Material/braun_rechts.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == 'r')
        {
            bildname = "Material/reichweite.png";
            fenster.einheitSetzen(x,y,bildname);
        }

        if (objekttyp == 'u')
        {
            bildname = "Material/meldung.png";
            fenster.einheitSetzen(x,y,bildname);
        }

    }

    public void figurAnzeigeAendern(int spieler){
        fenster.figurAnzeigeAendern(spieler);
    }

    public void gesundheitAendern(int s, int g){
        fenster.gesundheitAendern(s , g);
    }

    //     ?
    //     Ist die wichtig oder nur ein Überbleibsel eines früheren Versuchs?
    public void reichweiteAnzeigen() {
        controller.istAmZug();
    }

    public void angreifenButtonGedrueckt(int b)
    {
        fenster.angreifenButtonGedrueckt(b);
    }

    public void gesundheitsReset() {
        fenster.reset();
    }

    public void reichweiteAnzeigen(int spieler, int reichweite, int x, int y)
    {

        for(int i = 0; i<42; i++)
        {
            for(int o = 0; o<23; o++)
            {
                if(controller.spielfeldInhaltGeben(i,o) == 'r')
                {
                    controller.model.reichweiteSetzen(i, o, '.');
                }
            }
        }

        int xKoordinate = x - reichweite;
        int yKoordinate = y - reichweite;
        int a = xKoordinate;
        int b = yKoordinate;

        for(int xReihe = 0; xReihe < 2*reichweite; xReihe ++)
        {
            a = a+xReihe;
            for(int yReihe = 0; yReihe < 2*reichweite; yReihe++)
            {
                b= b+yReihe;
                //                 System.out.println("Methode Aufgerufen");
                if(a>-1 && a <42 && b >-1 && b <23)
                {
                    //                     System.out.println("Erste if schleife aufgerufen");
                    if(controller.spielfeldInhaltGeben(a,b) == '.')
                    {
                        if(controller.untergrundInhaltGeben(a,b) == 'g' || controller.untergrundInhaltGeben(a,b) == 'k' || controller.untergrundInhaltGeben(a,b) == 'i' || controller.untergrundInhaltGeben(a,b) == 's' || controller.untergrundInhaltGeben(a,b) == 'w')
                        {

                            controller.model.reichweiteSetzen(a, b, 'r');
                            //                         System.out.println("Rot auf Feld "+a+", "+b+" gesetzt!");
                        }
                    }
                }
                b = yKoordinate;
            }
            a = xKoordinate;
        }

    }

    public void meldungAnzeigen()
    {

        //         for(int x = 0; x<43; x++)
        //         {
        //             for(int y = 9; x<16; x++)
        //             {
        //                 einheitSetzen(x,y,'u');
        //                System.out.println();
        //             }
        //         }
    }

}